WorkSpaces のログインとログアウトが発生した際に通知を受け取る方法
困っていた内容
WorkSpaces のログインとログアウトを監視したいのですが、それを検知して通知させる方法がありましたら教えてください。
どう対応すればいいの?
WorkSpaces のログインイベントについては、「WorkSpaces Access イベント」を利用して検知ができる機能が既にあります。しかしながら、この機能はログアウトについてはサポートをしておりません。 また、イベントは、ベストエフォートベースでの出力となります。
そのため、今回は WorkSpaces の「UserConnected」メトリクスを使って WorkSpaces のログイン/ログアウトを検知してみようと思います。
試してみる
早速始めていきたいのですが、はじめに注意事項に目を通していただけますと幸いです。
<注意事項>
まずはドキュメントを参考にディレクトリを立ち上げて、WorkSpace「ws-cllpytrzw」を起動させました。
ログインを検知する仕組みを作る
CloudWatch アラームの作成
CloudWatch コンソールに移動し、ナビゲーションより「すべてのアラーム」を選択し、「アラームの作成」をクリックします。
次に「メトリクスの選択」をクリックします。
検索バーに「WorkSpaces」と入力すると、「WorkSpaces > ワークスペース ID 別」という候補が出てきますので、これを選択します。
「UserConnected」メトリクスを見つけ出して、チェックボックスにチェックを入れて、「メトリクスの選択」をクリックします。
メトリクスの項目はいじらずに、条件の項目でしきい値の種類を「静的」とし、アラーム条件を「より大きい」、しきい値を「0」として設定します。
次のアクションの設定では、後に作成する CloudWatch イベントのルールで指定を行うので、通知の項目の「削除」を選択して何も設定を行わずに「次へ」をクリックします。
次はアラーム名の選択です。アラーム名は「WorkSpace-Login」としました。入力を終えましたら「次へ」をクリックします。
最後にプレビューを確認し、問題がなさそうであれば「アラームの作成」を選択します。
これで CloudWatch アラームの作成は完了です。
CloudWatch Events ルールの作成
次に CloudWatch Events のルールを作成していきます。「ルールの作成」をクリックします。
イベントソースでは「イベントパターン」を選択し、ドロップダウンリストから「カスタムイベントパターン」を選択します。
- カスタムイベントパターン
{ "source": [ "aws.cloudwatch" ], "detail-type": [ "CloudWatch Alarm State Change" ], "resources": [ "arn:aws:cloudwatch:リージョン:AWSアカウントID:alarm:WorkSpace-Login" ], "detail": { "state": { "value": [ "ALARM" ] } } }
ターゲットではドロップダウンリストから「SNS トピック」を選択し、送信先トピック名を選択します。
そして、入力の設定をクリックし、「インプットトランスフォーマー」を選択します。
- 入力パス
{"Account":"$.account","MetricsWorkspaceId":"$.detail.configuration.metrics[0].metricStat.metric.dimensions.WorkspaceId","AlarmName":"$.detail.alarmName","Time":"$.time","Reason":"$.detail.state.reason"}
-
入力テンプレート
"WorkSpaceのログインを検知しました" "AWS Account ID : <Account> " "発生時間(GMT) : <Time>" "アラーム名 : <AlarmName>" "対象 WorkSpace : <MetricsWorkspaceId>" "理由 : <Reason>"
最後にこのルールの名前を「WorkSpace-Login-Event」として、「ルールの作成」をクリックします。 これで WorkSpace のログインを検知する仕組みが出来上がりました。
WorkSpaces クライアントからログインしてみる
さっそく WorkSpaces クライアントから対象の WorkSpace へログインを行います。
CloudWatch より、WorkSpace へのログインから間もなく UserConnected の値が 1 となってアラーム「WorkSpace-Login」のしきい値(0を超過)を超過していることがわかります。
SNS トピックに設定している Gmail の Email アドレス宛にログイン検知のメールが届きました!
ログアウトを検知する仕組みを作る
CloudWatch アラームの作成
ログアウトを検知する仕組みは、ログインを検知する仕組みの設定を少し変えれば出来てしまいます。
最初の手順はログアウトを検知する場合も同じです。
- CloudWatch コンソールより「すべてのアラーム」を選択し、「アラームの作成」をクリック。
- 次に「メトリクスの選択」をクリック。
- 検索バーに「WorkSpaces」と入力し、「WorkSpaces > ワークスペース ID 別」という候補を選択。
- 「UserConnected」メトリクスにチェックを入れて、「メトリクスの選択」をクリック。
メトリクスの項目はいじらずに、条件の項目でしきい値の種類を「静的」とし、アラーム条件を「以下」、しきい値を「0」として設定します。
次のアクションの設定では、通知の項目の「削除」を選択して何も設定を行わずに「次へ」をクリックします。
アラーム名の選択で、アラーム名を「WorkSpace-Logout」としました。入力を終えましたら「次へ」をクリックします。
プレビューを確認し、問題がなさそうであれば「アラームの作成」を選択し、CloudWatch アラームの作成を完了させます。
CloudWatch Events ルールの作成
こちらも同様にログインを検知する仕組みで作った CloudWatch Events ルールの設定を少し変えていきます。
- CloudWatch Events のルールを作成します。「ルールの作成」をクリックします。
- イベントソースで「イベントパターン」を選択し、ドロップダウンリストから「カスタムイベントパターン」を選択します。
-
カスタムイベントパターン
{ "source": [ "aws.cloudwatch" ], "detail-type": [ "CloudWatch Alarm State Change" ], "resources": [ "arn:aws:cloudwatch:リージョン:AWSアカウントID:alarm:WorkSpace-Logout" ], "detail": { "state": { "value": [ "ALARM" ] } } }
ターゲットではドロップダウンリストから「SNS トピック」を選択し、送信先トピック名を選択します。
そして、入力の設定をクリックし、「インプットトランスフォーマー」を選択します。
- 入力パス
{"Account":"$.account","MetricsWorkspaceId":"$.detail.configuration.metrics[0].metricStat.metric.dimensions.WorkspaceId","AlarmName":"$.detail.alarmName","Time":"$.time","Reason":"$.detail.state.reason"}
-
入力テンプレート
"WorkSpaceのログアウトを検知しました" "AWS Account ID : <Account> " "発生時間(GMT) : <Time>" "アラーム名 : <AlarmName>" "対象 WorkSpace : <MetricsWorkspaceId>" "理由 : <Reason>"
最後にこのルールの名前を「WorkSpace-Logout-Event」として、「ルールの作成」をクリックします。 これで WorkSpace のログアウトを検知する仕組みも出来上がりました。
WorkSpaces クライアントでログアウトしてみる
WorkSpace からログアウトを行います。
CloudWatch より、WorkSpace からのログアウトから間もなく UserConnected の値が 0 となってアラーム「WorkSpace-Login」のしきい値(0以下)を超過していることがわかります。
SNS トピックに設定している Email アドレス宛にログアウト検知のメールが届きました!